﻿using FastColoredTextBoxNS;
using System.Collections.Generic;
using System.Text.RegularExpressions;


namespace MPE
{
    static class ToolTips
    {
        public static void getToolTip(ref object sender, ref ToolTipNeededEventArgs e)
        {
            var range = new Range(sender as FastColoredTextBox, e.Place, e.Place);

            string hoveredWord = range.GetFragment("[^\n]").Text;
            if (e.HoveredWord.Length == 0) return;

            Match match = Regex.Match(hoveredWord, @"(\[*[A-Z]*.*\]*)+");//Очистка от мусора
            Match indent = Regex.Match(match.Value, @"^[\t\s]*");
            string clearedHoveredWord = match.Value;
            if (indent.Value.Length > 0) clearedHoveredWord = match.Value.Remove(0, indent.Value.Length);//Удаляем лишнии отступы в начале

            if (match.Success)
            {
                string[] str = clearedHoveredWord.Split(new string[] { "][" }, System.StringSplitOptions.None);

                clearedHoveredWord = str.Length > 1 ? str[0] + "]" : str[0];
                switch (str.Length)
                {
                    case 1: { break; }
                    case 2: { clearedHoveredWord += "[]"; break; }
                    case 3: { clearedHoveredWord += "[][]"; break; }
                    case 4: { clearedHoveredWord += "[][][]"; break; }
                }
            }
            if (clearedHoveredWord.Contains(e.HoveredWord))
            {
                toolTipsValues.TryGetValue(clearedHoveredWord, out string tooltip);
                if (tooltip != null && tooltip.Length > 0)
                {
                    e.ToolTipTitle = clearedHoveredWord;
                    e.ToolTipText = tooltip;
                }
            }
        }

        public static string getToolTipForItem(string item)
        {
            string tooltip;
            toolTipsValues.TryGetValue(item, out tooltip);
            if (tooltip != null && tooltip.Length > 0)
                return tooltip;
            return "";
        }

        static Dictionary<string, string> toolTipsValues = new Dictionary<string, string>() {
            { "$SIZE_BUFFER", "Размер буффера(сколько в нем хранится значений)" },
            { "$REQUEST_DATA","Глобальная переменная которая хранит результат запроса на сервер" },
            { "$MODEL_NAME","Название шаблона" },
            { "$captcha","Перемення хранящия результат работы функции RUCAPTCHA/READ_CAPTCHA" },
            { "$bool","Переменная с результатом выполнения функции 1 - true 0 - false" },
            { "$DATE", "Переменная хранящая текущию дату" },
            { "$TIME", "Переменная хранящее время" },
            { "$IT", "Переменная хранящее номер прохождения в цикле BREAK_POINT" },
            { "$WORK_TIME", "Количество минут пройденных со старта работы шаблона" },

            { "HTTP", "Протокол для прокси" },
            { "HTTPS", "Протокол для прокси" },
            { "SOCKS5", "Протокол для прокси" },
            { "REPORT", "Мод 'Жалоба'' для функции RECAPTCHA" },
            { "CONNECT", "DEFINE для функции imap_command - обозначающая соединение с сервером" },
            { "READ_UNSEEN_LETTER", "DEFINE для функции imap_command - обозначающая чтение непрочитанных писем" },
            { "SPECIAL_CHAR", "Параметр для функции GEN_PASSWORD" },
            { "NUMBER", "Параметр для функции GEN_PASSWORD" },
            { "CHAR", "Параметр для функции GEN_PASSWORD" },
            { "UPPER_CHAR", "Параметр для функции GEN_PASSWORD" },
            //{"SET_NULL", "" },

            { "ERROR_EXIT", "Настройки для шаблона" },
            { "ERROR_REPEAT", "Настройки для шаблона" },
            { "ERROR_CONTINUE", "Настройки для шаблона" },

            { "[DISPLAY_BUFFER]", "Отобразить данные буфера в лог, может приниать параметр -1, при котором вместе с логом не будет выводится нумерация" },
            { "[DISPLAY_REQUEST]", "Открывает окно с содержимым результата разпроса на сервер \nМожет принимать дополнительный параметр, для открытия результата запроса через стороннюю программу которая открывает те или иные расширения по умолчанию, 2 - открыть как html, 3 - открыть как txt" },
            { "[LOG_DISPLAY][]", "Вывести значение в Лог программы\nПример:[LOG_DISPLAY][Task comlete]" },
            { "[DISPLAY][]", "Функция для отображения контекста в меню юзер. инфо\nПример: [DISPLAY][Balannce $1]" },

            { "[PARSE][][]", "Функция для парсинга результата запроса на сервер. Принимает 2 параметра - текст(например HTML теги) между которым нужно искать нужное значение. Резульат запишет в буффер под именем, $+текущий размер буффера+1, также запишет в $bool true(1) если что-то найдено или folse(0) в обратном случае\nТакже дополнительно имеется третий параметр, для парсинга результата из него.\nПример: [PARSE][<html>][</html>] - парсинг из $REQUEST_DATA\nПример: [PARSE][< html >][</ html >][$var] - парсинг из $var " },
            { "[PARSE][][][]", "Функция для парсинга результата запроса на сервер. Принимает 2 параметра - текст(например HTML теги) между которым нужно искать нужное значение. Резульат запишет в буффер под именем, $+текущий размер буффера+1, также запишет в $bool true(1) если что-то найдено или folse(0) в обратном случае\nТакже дополнительно имеется третий параметр, для парсинга результата из него.\nПример: [PARSE][<html>][</html>] - парсинг из $REQUEST_DATA\nПример: [PARSE][< html >][</ html >][$var] - парсинг из $var " },
            { "[REG_PARSE][]", "Функция для парсинга результата запроса на сервер, при помощи регулярных выражений, Резульат запишет в буффер под именами, $+текущий размер буффера+1\nПример: [REG_PARSE][\\[0-9\\]{1,6}]\nВажно!: незабывайте экранировать квадратные скобки!\nОписание всех возможностей регулярных выражений тут http://www.doc.crossplatform.ru/qt/4.6.x/qregexp.html \nТакже дополнительно имеется второй параметр, для парсинга результата из него.\nПример: [REG_PARSE][\\[0 - 9\\]{1,6}][$var] - парсинг из $var" },
            { "[TO_BASE64][]", "Привести значение в base64 поледовательность, результат хранится под именем $result\nПример:[TO_BASE64][$text]" },
            { "[FROM_BASE64][]", "Разшифровать base64 поледовательность, результат хранится под именем $result\nПример:[FROM_BASE64][$result_text]" },
            { "[FIND_TEXT][]", "Найти указанный текст, результат запишет в $bool, по умолчанию поиск будет произведен в $REQUEST_DATA, но можно искать в переменной\nПример: [FIND_TEXT][text]\nПример: [FIND_TEXT][text][$var]" },
            { "[FIND_TEXT][][]", "Найти указанный текст, результат запишет в $bool, по умолчанию поиск будет произведен в $REQUEST_DATA, но можно искать в переменной\nПример: [FIND_TEXT][text]\nПример: [FIND_TEXT][text][$var]" },
            { "[URL_ENCODE][]", "Зашифровать спец символы, результат запишет в буффер под именем $resultencode\nПример:[URL_ENCODE][$text]" },
            { "[URL_DECODE][]", "Разшифровать стоку зашифрованую при помощи URL_ENCODE, результат запишет в буффер под именем $resultdecode\nПример:[URL_DECODE][$text]" },
            { "[HASH][][]", "Получить хеш строки, первый параметр тип хеша, второй что шифровать(необязательный параметр), результат сохраняет в $result, принимает типы хешей, md4, md5, sha256, sha512\nПример:[HASH][md5][$var] - хешировать $var\nПример:[HASH][md5] - хешировать данные в $REQUEST_DATA" },
            { "[GEN_PASSWORD][][]", "Функция генерации пароля, первый параметр условия для генерации, второй длина пароля, условия указываются через разделитель | ,результат выполнения функции сохранится в $gen_pass\nNUMBER - числа, CHAR - символы, UPPER_CHAR - символы в верхнем регистре, SPECIAL_CHAR - спецыальные символы\nПример: [GEN_PASSWORD][NUMBER|UPPER_CHAR][12]" },
            { "[IS_NUMERIC][]", "Функция проверяет является ли значение числом, результат запишет в $bool\nПример: [IS_NUMERIC][$var]" },
            { "[ADD_IN_BUFFER][][]", "Добавть свои данные в буффер\nПример: [ADD_IN_BUFFER][$text][hello world]\nМожно с одним параметром тогда ключем будет порядковый номер записи относительно количества строк\nПример: [ADD_IN_BUFFER][hello world]" },
            { "[CLEAR_BUFFER]", "Очистка буфера" },
            { "[SPLIT_STR][][]", "Функция разделения строки через сепаратор, например example@mail.ru:pass, запишет результат в $1[example@mail.ru], $2[pass] и тд, также запишет информацию об успешности операции в $bool\nПример:[SPLIT_STR][:][example@mail.ru:pass]" },
            { "[GET_CHAR][][]", "Функция получения символа по индексу в строке, первый параметр номер символа(начинается с 1), второй сама строка,результат запишет в $result\nПример:[GET_CHAR][2][text]" },
            { "[UPP_LOW_STR][][]", "Привести строку в верхний или нижний регистр, 1 в верхний, 0 в нижний, результат запишет в $result кторый хранится в буффере\nПример:[UPP_LOW_STR][1][$var]" },
            { "[STR_REPLACE][][]", "Произвести замену в строке, по умолчанию делает замену в $REQUEST_DATA и сохраняет результат в $REQUEST_DATA\nПример:[STR_REPLACE][html][HTML]\nМожно открыть еще пару скобок и провести замену в переменной результат записывает в $result\nПример:[STR_REPLACE][html][HTML][$var]" },
            { "[STR_REPLACE][][][]", "Произвести замену в строке, по умолчанию делает замену в $REQUEST_DATA и сохраняет результат в $REQUEST_DATA\nПример:[STR_REPLACE][html][HTML]\nМожно открыть еще пару скобок и провести замену в переменной результат записывает в $result\nПример:[STR_REPLACE][html][HTML][$var]" },
            { "[COMPARE_WITH_BUFFER][]", "Сравнить строку со строками в буффере, вывести в $result строку из буффра где совпало больше всего символов, в переменую $count запишет сколько символов совпало, регистр строк не важен\n[COMPARE_WITH_BUFFER][$captcha]" },
            { "[RAND][][]", "Функция для генерации случайного числа\nПример: [RAND][1][10]\nРезультат запишет в буффер под именем $result" },
            { "[STR_LEN][]", "Подсчитать днину строки, результат запишет в $result" },
            { "[SORT_BUFFER]", "Отсортировать буффер, при этом удалив повторы" },
            { "[TRIMMED][]", "Очистить строку от пробелов и переносов с начала и с конца, результат будет записан в $result\n[TRIMMED][][1]\nС дополнттельным параметром 1, функция очистит строку от пробелов и переносов полностью, результат будет записан в $result" },
            { "[CLEAR_REQUEST]", "Очистить $REQUEST_DATA от заголовков" },
            { "[STR_TO_UTF8][]", "Изменить кодировку строки на UTF8, результат будет записан в $result" },
            { "[OPERATIONS_WITH_BUFFERS][]", "Сравнить 2 буффера памяти и выполнить над ними операцию, сравнивается буффер №1 и №2\nОпрации над буфферами:\n[1] - убрать из буффера 1 данные найденные в буффере 2\n[2] - добавить в буффер 1 данные из буффера 2, (только уникальные)\nПример:[OPERATIONS_WITH_BUFFERS][1]" },

            { "[IF][]", "Функция-условие, позволяющая применять сравнение между двумя значениями (>  <  =  !=  >=  <=)  всегда должна закрыватся [ENDIF]\nПример:\n[IF][$SIZE_BUFFER>0]\n     [DISPLAY][Balannce $1]\n[ENDIF]\nТакже функция может принимать два параметра, третий параметр принимает знак условия обох сравнений && или ||, если третий параметр не указать то будет о умолчанию использован знак &&\n[IF][$SIZE_BUFFER>0][$bool]  - тоже самое что и [IF][$SIZE_BUFFER>0][$bool][&&]\n     [DISPLAY][Balannce $1]\n[ENDIF]\nили\n[IF][$SIZE_BUFFER>0][$bool][||]\n     [DISPLAY][Balannce $1]\n[ENDIF]" },
            { "[ELSE]", "Логическе ИЛИ для условия [IF]\nПример:\n[IF][1>3]\n     [DISPLAY][1]\n[ELSE]\n     [DISPLAY][2]\n[ENDIF]" },
            { "[ENDIF]", "Блок закрывающий условие [IF]" },
            { "[BREAK_POINT][]", "Точка остановки, в параметре указывается любое имя\nПример: [BREAK_POINT][name1]" },
            { "[GO_TO_BREAK_POINT][]", "Вернутся к точке остановки, в параметре указывается имя указанное в BREAK_POINT к которому надо вернутся\nПример: [GO_TO_BREAK_POINT][name1]\nМожет принимать параметр для указания количества возвратов к точке остановки, номер цикла храится в $IT, если этот параметр не указан то автоматом пропишится колличесто из настройки MAX_BREAK_POINT_CYCLE\n[GO_TO_BREAK_POINT][name1][10]" },
            { "[INCLUDE][]", "Подключить сторонний шаблон, принимает в парамеире имя шаблона, можно указать путь по url\nПример:[INCLUDE][modelName]\nПример:[INCLUDE][http://site.ru/model.txt]" },

            { "[PLAY_SOUND][]", "Проиграть указанную звуковую дорожку\nПример:[PLAY_SOUND][sound.mp3]" },
            { "[EXIT_TASK]", "Завершить работу шаблона" },
            { "[REPEAT_TASK]", "Начать выполнять шаблон сначала" },
            { "[VERSION][1][VPATH]", "Проверить версию шаблона указанную автором, первый пораметр версия(можно указывать что угодно, идет банальная порверка на совпадение текста), второй параметр имя txt файла\nПример: [VERSION][1.0][teaser.bz-238f133de5b8d9a16f900bb094c26f6b.txt] " },
            { "[SLEEP][]", "Остановить работу шаблона на определенное количество секунд\nПример:[SLEEP][10]" },
            { "[SET_MODEL_SETTINGS][]", "Установить настройки для шаблона\nERROR_EXIT - при возникновении ошибки закончить работу шаблона\nERROR_REPEAT - при возникновении ошибки начать работу шаблона заново\nERROR_CONTINUE - при возникновении ошибки продолжить работу шаблона\nMAX_BUFFER_SIZE - установть  максимальный размер буффера для шаблона(по умолчанию 500)\nAUTO_REDIRECT - автоматический переход по Location в заголовках, по умолчанию отключено\nMAX_BREAK_POINT_CYCLE - установить максимальное коллицество цыклов для GO_TO_BREAK_POINT (по умолчанию 500)\nWRITE_WORK_LOG_IN_FILE - автоматически записывать лог выполняемых функций в текстовый файл по пути file/work_log_$MODEL_NAME\nПример: [SET_MODEL_SETTINGS][ERROR_EXIT]\nПример: [SET_MODEL_SETTINGS][AUTO_REDIRECT][1] или [SET_MODEL_SETTINGS][AUTO_REDIRECT][0]\nПример: [SET_MODEL_SETTINGS][MAX_BUFFER_SIZE][1500]" },
            { "[SET_MODEL_SETTINGS][][]", "Установить настройки для шаблона\nERROR_EXIT - при возникновении ошибки закончить работу шаблона\nERROR_REPEAT - при возникновении ошибки начать работу шаблона заново\nERROR_CONTINUE - при возникновении ошибки продолжить работу шаблона\nMAX_BUFFER_SIZE - установть  максимальный размер буффера для шаблона(по умолчанию 500)\nAUTO_REDIRECT - автоматический переход по Location в заголовках, по умолчанию отключено\nMAX_BREAK_POINT_CYCLE - установить максимальное коллицество цыклов для GO_TO_BREAK_POINT (по умолчанию 500)\nWRITE_WORK_LOG_IN_FILE - автоматически записывать лог выполняемых функций в текстовый файл по пути file/work_log_$MODEL_NAME\nПример: [SET_MODEL_SETTINGS][ERROR_EXIT]\nПример: [SET_MODEL_SETTINGS][AUTO_REDIRECT][1] или [SET_MODEL_SETTINGS][AUTO_REDIRECT][0]\nПример: [SET_MODEL_SETTINGS][MAX_BUFFER_SIZE][1500]" },
            { "[SET_INCOM][]", "Указать вырученный за сегодня доход, для отображения и подсчета в таблице дохода, для обнуления баланса на сегодняшний день используйте SET_NULL\nПример:[SET_INCOM][13.89]\nПример:[SET_INCOM][SET_NULL]\nМожет принимать второй дополнительный параметр - максимальная сумма, на тут случай если изменильсь html разметка сайта что приведет к проблемам парсинга и падсчета\nПример:[SET_INCOM] [1.78] [5.00]" },
            { "[SET_INCOM][][]", "Указать вырученный за сегодня доход, для отображения и подсчета в таблице дохода, для обнуления баланса на сегодняшний день используйте SET_NULL\nПример:[SET_INCOM][13.89]\nПример:[SET_INCOM][SET_NULL]\nМожет принимать второй дополнительный параметр - максимальная сумма, на тут случай если изменильсь html разметка сайта что приведет к проблемам парсинга и падсчета\nПример:[SET_INCOM] [1.78] [5.00]" },
            { "[CBROWSER_COMMAND][][][]", "Примеры комманд, которых нехватает можно дописать самим\n[CBROWSER_COMMAND][name][START_BROWSER][SHOW_NORMAL]\n[CBROWSER_COMMAND][name][START_BROWSER][SHOW_MINIMAZE]\n[CBROWSER_COMMAND][name][CLOSE_WINDOW]\n[CBROWSER_COMMAND][name][OPEN_URL][https://mail.google.com/]\n[CBROWSER_COMMAND][name][OPEN_URL][http://mig-bux.net/#:login||6LfmFhETAAAAAIWflwmOnSckQ0QDFoA5xa_j9YLM]\n[CBROWSER_COMMAND][name][WAIT_LOAD]\n[CBROWSER_COMMAND][name][GET_URL]\n[CBROWSER_COMMAND][name][EVAL_JS]\n[CBROWSER_COMMAND][name][MOUSE_EMULATION]\n[CBROWSER_COMMAND][name][SCREEN_SHOT]" },
            { "[EVALUATE_JS][]", "Выполнить JavaScript код, результатом выполнения будет последняя затронутая переменная, результат будет записан в $result" },
            //{"[JS]", "" },
            //{"[/JS]", "" },
            { "[USE_BUFFER][]", "Указания номера буффера с которым будет работать следующая функция, всге буфферов 5, нумерация 1-5\n[USE_BUFFER][3]" },
            { "[CLEAR_TEMPLATE_MEMORY]", "Очистить переменные, буффер, куки, прокси\n[CLEAR_TEMPLATE_MEMORY]" },
            { "[EXEC_SQL][][]", "Выполнить SQL запрос\n[EXEC_SQL][SELECT `text` FROM `myTable` WHERE `id` = 1][file/database.db]" },
            { "[VAR][][]", "Создать  переменную, можно применять математические функции, читать тут http://djoser-blog.ru/forum/index.php?/topic/36-obnovleniia/?p=642 \nПример: [VAR][$name][value]" },
            { "[VAR][][][]", "Создать  переменную, можно применять математические функции, читать тут http://djoser-blog.ru/forum/index.php?/topic/36-obnovleniia/?p=642 \nПример: [VAR][$name][value]" },
            { "[MUTEX][][]", "Мутекс, функция для блокировки доступа к коду для шаблонов, доступно 23 мутекса(1-23), принимает параметры LOCK и UNLOCK, нельзя в одном шаблоне использовать больше одного мутекса\nПример: [MUTEX][1][LOCK]" },
            //{"[STATIONARY_CBROWSER_COMMAND][][]", "" },

            { "[WRITE_IN_FILE][][]", "Записать данные в файл, если файл не существует будет создан новый, если файл существует он будет перезаписан.\nПример:[WRITE_IN_FILE][file.txt][$var]\nПо умолчанию запишет в файл $REQUEST_DATA\nПример:[WRITE_IN_FILE][file.txt]" },
            { "[ADD_TO_FILE][][]", "Дописать данные в файл, если файл не существует будет создан новый.\nПример:[ADD_TO_FILE][file.txt][$var]" },
            { "[READ_FILE_ALL][]", "Считать данные из файла, данные будут записаны в $REQUEST_DATA\nПример:[READ_FILE_ALL][file.txt]" },
            { "[READ_FILE_LINE][]", "Считать данные из файла по-строчно, каждая строка по отдельности допишется в буффер под именами очередности $1,$2,$3 и тд\nПример:[READ_FILE_LINE][file.txt]" },
            { "[WRITE_BUFFER_IN_FILE][]", "Записать буффер в файл\nПример: [WRITE_BUFFER_IN_FILE][result.txt]" },
            { "[SAVE_CLEAR_REQUEST][]", "Убрать заголовки из переменной $REQUEST_DATA и сохранить в файл" },
            { "[DELETE_FILE][]", "Удалить указанный файл\nПример: [DELETE_FILE][captcha/img.png] " },
            { "[COPY_FILE][][]", "Копировать файл\nПример: [COPY_FILE][captcha/img.png][desktop/img.png] " },
            { "[RENAME_FILE][][]", "Переименовать файл\nПример:[RENAME_FILE][captcha/img.png][captcha/img2.png] " },
            { "[MOVE_FILE][][]", "Перенести файл\nПример:[MOVE_FILE][captcha/img.png][desktop/img.png] " },
            { "[FILE_EXISTS][]", "Проверить наличие файла, результат запишет в $bool\nПример: [FILE_EXISTS][captcha/img.png]" },
            { "[CREATE_DIR][]", "Создать дерикторию\nПример: [CREATE_DIR][captcha/NewFolder]" },
            { "[DELETE_DIR][]", "Удалить дерикторию\nПример: [DELETE_DIR][captcha/NewFolder]" },
            { "[RENAME_DIR][][]", "Переименовать дерикторию\nПример: [RENAME_DIR][captcha/NewFolder][captcha/cap]" },
            { "[FOLDER_EXISTS][]", "Проверить наличие папки, результат запишет в $bool\nПример: [FOLDER_EXISTS][captcha/model]" },
            { "[FROM_BASE64_TO_FILE][][]", "Декодировать переменную из base64  и сохранить в файл\nПример: [FROM_BASE64_TO_FILE][$var][file/img.png]" },
            { "[FROM_FILE_TO_BASE64][]", "Кодировать содержимое файла в base64, результат сохранит в переменную $result" },

            { "[OPEN_URL_IN_LOCAL_BROWSER][]", "Открыть ссылку в локальном браузере" },
            { "[RUN_FILE][]", "Запустить указанный файл\nПример: [RUN_FILE][miniPoster.exe]\nПример: [RUN_FILE][info.docx]\nМожно запустить файл с параметром командной строки, параметры записываются через |\nПример: [RUN_FILE]\n[miniPoster.exe]\n        [--test]\n        Пример: [RUN_FILE] [miniPoster.exe] [--test|asd|lol]" },

            {  "[LOAD_CAPTCHA][]", "Загружает капчу, сохраняет в файле и в памяти для дальнейшей обработки функциями для роботы с капчей, по умолчанию сохраняет в captcha/имяшаблона_captcha.png\nПример:[LOAD_CAPTCHA][http://rewbux.com/captcha2.php]\nМожно сразу загрузить капчу в память из локального файла который находится по пути captcha/имяшаблона_captcha.png\nПример:[LOAD_CAPTCHA][captcha/имяшаблона_captcha.png]\nМожно загружать с base64 который спарсили с сайта\nПример:[VAR][$q][data:image/png; base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAAAYAQMAAAAYies/AAAABlBMVEUAAAQEQUi\n8aTGiAAAAAnRSTlMA8bwpD7IAAAC8SURBVBiVbVCxDQIxDDz7EYqoAqKgNEzACC4pGSFiEn8ooGcBRmEUSsqICfAn4qVHWNHZFzt2zsAfm03pbgAbk3sPaSxi1eqDXz4hDvQaIsU8Is14wxF+Hg52DxzzQCkB61\n4QokVQDN7ilAUxWQKn6PTyFofio85FQXwrWKKH+mDFAldxyBAGHbGCbY1DJmPhA7oSxLrSFQcqVY41BVI/7G1QFWjTqj9ymceQWgV9uU1cM5k+VtPJJlXqqj7loiU9T0TengAAAABJRU5ErkJggg==]\n[LOAD_CAPTCHA] [$q]" },
            { "[SAVE_CAPTCHA]", "Сохраняет капчу из памяти в файл, по пути captcha/имяшаблона_captcha.png" },
            { "[CONVERT_IMG][][]", "Конвертировать формат изображения из текущего в указанный, первый параметр имя исходного изображения(должно находится в папке captcha), второй параметр - формат, сохранит изображения с указанным именем и новым форматом.\nПример:[CONVERT_IMG][text_captcha.jpg][png]" },
            { "[GET_IMAGE_FROM_ARRAY_IMG][]", "Скопировать изображение из массива изображений в рабочее изображение, в параметре принимает номер картинки в массиве (начинается с 1)\nПример:[GET_IMAGE_FROM_ARRAY_IMG][2]" },
            { "[DELL_IMAGE_FORM_ARRAY_IMG][]", "Удалить изображения под указанным индексом(нумерация от 1)" },
            { "[SET_IMAGE_TO_ARRAY_IMG][]", "Установить локальное изображение в массив каритинок под указанным индексом" },
            { "[ARRAY_TO_IMAGE][]", "Соеденить массив картиноr в единую через указанное количество пикселей" },

            { "[SPLIT_BLACK_END]", "Функция делит картинку на части по началу и окончания ряда чёрных пикселей по вертикали и записует результат в буффер изображений, по умолчанию имеющийся массив очищается, если передать параметр со зачением 0 то картинки останутся." },
            { "[SPLIT_CIRCUIT]", "Функция делит изображения считывая последовательность черных пикселей и записует результат в буффер изображений, по умолчанию имеющийся массив очищается, если передать параметр со зачением 0 то картинки останутся." },
            { "[SPLIT_WIDTH][]", "Функция делит изображение по заданой ширине, по умолчанию имеющийся массив очищается, если передать параметр со зачением 0 то картинки останутся.\nПример: [SPLIT_WIDTH][20]" },
            { "[SPLIT_SHADES]", "Разделить оттенки на изображение по разным картинкам в буффер, по умолчанию имеющийся массив очищается, если передать параметр со зачением 0 - ноль, то картинки останутся, если передать параметр S то картинки отсортируются по порядку размещение оттенков по ширине.\nПример:[SPLIT_SHADES]\nПример:[SPLIT_SHADES][0]\nПример:[SPLIT_SHADES][S]\nПример:[SPLIT_SHADES] [0S]" },
            { "[SPLIT_CIRCUIT_EX][]", "Разделить черные символы на отдельные изображения, в качестве параметра указывается радиус\nПример:[SPLIT_CIRCUIT_EX][1]" },
            { "[SPLIT_SHADES_EX][0]", "Разделить оттенки\n[SPLIT_SHADES_EX][0]" },
            { "[SET_SPLIT_EX_FILTER][][]", "Функция устанавливает фильтр для изображений что были разделены любой функцией SPLIT_EX\nИмеет следующие фильтры, FILTER_MAX_WIDTH, FILTER_MAX_HEIGHT, FILTER_MIN_WIDTH, FILTER_MIN_HEIGHT, SET_FIXED_WIDTH\nПри установки фильтра SET_FIXED_WIDTH, отделенный символ отцентрируется на изображении с высотой исходной картинки и указанной шириной\nЛюбой фильтр можно отключить указав в качестве параметра ноль\nПример\n[SET_SPLIT_EX_FILTER][FILTER_MAX_WIDTH][25]\n[SET_SPLIT_EX_FILTER][SET_FIXED_WIDTH][30]" },

            { "[DISPLAY_IMG]", "Отобразить в окне картинку которая хранится в памяти" },
            { "[DISPLAY_ARRAY_IMG]", "Отобразить в окне массив изображений которые хранятся в памяти" },
            { "$IMG_ARRAY_COUNT", "Переменная хранящия количество изображений в массиве" },
            { "[COMPARE_IMAGES][][]", "Сравнить два изображения, записывает в $bool true если изображения полностью совпали, и в $result процент совпадения.\n[COMPARE_IMAGES][captcha/img1.png][captcha/img2.png]" },
            { "[GET_IMAGE_INFO][]", "Получить информацию об изображении, информация будет записана в буффер, параметр 1 - включает высоту и ширину изображения, параметр 2 - высоту, ширину и общее количество пикселей, все цвета пикселей и их колличестово" },
            { "[ENTER_CAPTCHA][]", "Открыть окно для ручного ввода капчи, результат будет записан в $captcha\nПример: [ENTER_CAPTCHA][captcha/name.png]\nМожно загружать сразу по url\nПример: [ENTER_CAPTCHA][http://www.mibux.net/captcha.php]" },

            { "[CLEAR_TRANSPARENT]", "Заменить прозрачные пиксели белыми." },
            { "[COLOR_TRESHOLD][128]", "Установить порог цвета от 0 до 255, все пиксели цвет которых меньше порога станут черными, остальные белыми, можно использовать цвет в HEX формате\nПример:[COLOR_TRESHOLD][128]\nПример:[COLOR_TRESHOLD][#1E90FF]" },
            { "[CLEAR_INTERFERENCE][]", "Функция для очистки от шума(точек), функция принимает в параметре максимально возможную длину шума в пикселях(работает только с черно-белым изоражением)\nПример:[CLEAR_INTERFERENCE][10]" },
            { "[CHANGE_COLOR_IF_NOT_THIS_COLOR][][]", "Функция для замены всех цветов если он они не являются указанным, первый параметр нужный цвет, второй - на какой цвет заменять все остальные\n[CHANGE_COLOR_IF_NOT_THIS_COLOR][#FFFAFA][#00008B]" },
            { "[CLEAR_GRADIENT]", "Очистить капчу от градиента" },
            { "[CLEAR_LINES][]", "Очистить изображение от линий, принимаемый параметр - максимальная высота линии, может принимать дополнительный параметр для указания направления линии, VERTICAL и HORISONTAL, по умолчанию удаляются горизонтальные линии\nПример: [CLEAR_LINES][1]\nПример: [CLEAR_LINES][1][VERTICAL]\nПример: [CLEAR_LINES] [1] [VERTICAL|HORISONTAL]" },
            { "[APPLY_NEGATIVE]", "Заменить в изображении черные пиксели на белые, а белые на черные" },
            { "[SEAL_MICROCRACKS][]", "Функкция удаляет микротрещины в изображении, в параметре указываются максимальный размер трещены в пикселях\nПример: [SEAL_MICROCRACKS][3]\nМожет принимать дополнительный параметр - уровень проверки, проверка 4ёх стороны для маленьких трещен(используется по умолчанию),параметр - 1 включает проверку 8ми сторон для большых разрывов\nПример: [SEAL_MICROCRACKS][1][1] " },
            { "[RGB_COLOR_TRESHOLD][][]", "Установить границу цвета для пикселей по одному из RGB цветов - RED GREEN BLUE\nПример [RGB_COLOR_TRESHOLD][RED][77]" },
            { "[CHANGE_COLOR_ON_COLOR][][]", "Функция для замены одного цвета на другой\n[CHANGE_COLOR_ON_COLOR][#FFFAFA][#00008B]" },
            { "[FIND_PIXEL][]", "Найти коорднинаты пикселя указанного цвета, статус успеха записывает в $bool результат в буффер с именами $x,$y\nПример:[FIND_PIXEL][#fc0204]" },
            { "[ONE_OF_RGB_TO_BLACK]", "Сделать черными пиксели которые в которых два из трех цветов rgb равны нулю, все остальные заменить белым " },
            { "[ALIGN_IMG][]", "Функция выравнивает изображение, принимает в параметре примерный-максимальный угол наклона картинок\nПример: [ALIGN_IMG][10]\nДля выравнивания символа поворачивается изображение и выбирается самая короткая ширина, но для выравнивания строки нужно менять не ширину а высоту, поэтому можно передать дополнительный параметр - 1 для поиска самой меньшей высоты\nПример: [ALIGN_IMG][10][1]" },
            { "[ALIGN_IMG_ARRAY][]", "Выровнять массив изображений, параметр - максимальный угол наклона символа" },
            { "[CROP][][]", "Функция обрезает капчу с указанной стороны, на указанное количество пикселей, первый параметр принимает значения: TOP, DOWN, LEFT, RIGHT, второй количество пикселей\nПример:[CROP][DOWN][20]" },
            { "[CROP_ALL_SIDE]", "Обрезать картинку со всех сторон до черных пикселей" },
            { "[COPY_IMAGE][]", "Копировать кусок изображения, точки x,y width, height, копирует в основную картинку\nПример: [COPY_IMAGE][10:10:40:50]\nМожно скопировать кусок картинки и сохранить в массив, добавив параметр 1\nПример: [COPY_IMAGE][10:10:40:50][1]" },
            { "[CUT_GRID][]", "Порезать картинку сеткой и сохранить куски в массив изображерний" },

            { "[COMPRESS_SHADES][]", "Сжать оттенки на картинке, парамаетр - уровень сжатия, от 1 до 3\nПример: [COMPRESS_SHADES][1]" },

            { "[START_MAKE_MODEL]", "Стартавая точка создания массива для моделей" },
            { "[END_MAKE_MODEL]", "Конечная точка создания массива для моделей, может принимать параметр - процент качества, параметр нужен для сравнения эталонов, для того чтобы небыло повторов, по умолчанию он равен 80%, так что регулируйте сами на своё усмотрение, чем меньше изображение тем больше должен быть процент\nПример:[END_MAKE_MODEL][90]" },
            { "[COMPLETE_MAKE_MODEL][$MODEL_NAME]", "Собрать модели изображений и сохранить в файл .model, принимет в параметре имя файла с эталонами, сохраняет в папку model" },
            { "[FIND_ARRAY_IMG_IN_MODEL_LIST][]", "Найти массив изображений в файле с моделями\nПример: [FIND_ARRAY_IMG_IN_MODEL_LIST][resultName.model]" },

            { "[RUCAPTCHA][][]", "Функция для отправки капчи на разшифровку на сайт rucaptcha.com, первый параметр ключ рукапчи, второй путь к ней\nПрименр:[RUCAPTCHA][a000vhujfgyujgyytuygugy26bf][http://byketu.ru/captcha.php]\nРезультат запишет в буффер под именем $captcha а также в $1 для совместимости со старыми шаблонами\nТакже можно отправить жалобу на неправильно разгаданную капчу\nПрименр:[RUCAPTCHA][a000vhujfgyujgyytuygugy26bf][REPORT]\nЕще можно отправить локально загруженную капчу\nПрименр:[RUCAPTCHA][a000vhujfgyujgyytuygugy26bf][captcha/name_captcha.png]" },
            { "[CAPTCHA_PROEVOLITION][]", "Функция для капчи в движках ProEvolution, принимает в параметре имя папки в которой лежат изображения для сравнения(только имя папки, папка должна лежать в папке captcha), возвращает номер не неайденой картинки в $captcha, картинки должны иметь имена 0.png 1.png и так до 9\nПример: [CAPTCHA_PROEVOLITION][proEval_gentleadzs]" },
            { "[TESSERACT][$MODEL_NAME_captcha.png]", "Прочить изображения при помощи tesseract orc, результат сохранится в $captcha, а так же посимвольно в буффер.\nПример:[TESSERACT][http://rewbux.com/captcha2.php]\nПример:[TESSERACT][model-name_captcha.png] - изображение должно находится в папке captcha" },
            { "[ABBYY_READER][]", "Считать капчу при помощи программы ABBYY FINE READER\nРезультат сохранится в $captcha а также по-символьно в буффер\nПример: [ABBYY_READER][http://5net.ru/capcha/capcha_nano.php]\nМожно из локального хранилища, если была предварительная загрузка капчи при помощи других функций\nПример: [ABBYY_READER][captcha/name_captcha.png]\nМожно указать дополнительную пару скобок со значением NOT_CLEAR_SPACE чтобы функция по умолчанию не удаляла пробелы\nПример: [ABBYY_READER][http://5net.ru/capcha/capcha_nano.php][NOT_CLEAR_SPACE]" },
            { "[LOGICAL_READER]", "Логическое чтение загруженной капчи, капчу принимает из массива картинок" },
            { "[FIND_IMG_LIST_ON_IMG][][]", "Найти совпадения изображений на загруженной картинке, в параметре указывается путь к папке с изображениями, в качестве рузультата записывает имена изображений в $captcha а также по символьно в буффер, второй параметр процент совпадения\nПример: [FIND_IMG_LIST_ON_IMG][captcha/imglist/][80] " },
            { "[RECAPTCHA_READER][]", "Разгадать загруженную картинку рекапчи, принимает текст от гугла - дорожные знаки, номера домов, возвращает $bool если что-то нашел, и записывает в буффер номера картинок по которым надо кликнуть\n[RECAPTCHA_READER][номера домов]" },
            { "[XEVIL][][]", "Решает капчу через XEvil, принимает порт XEvil-ла и картинку(локально или url), резульат будет записан в $captcha\nПример:[XEVIL][80][http://site.ru/captcha.php]" },

            { "[GET][]", "Функция для отправки GET запроса на сервер.\nПример: [GET][http://djoser-blog.ru/]" },
            { "[POST][][]", "Функция для отправки POST запроса на сервер.\nПример: [POST][http://djoser-blog.ru/login.php][login=admin&pass=12345]" },
            { "[PUT][][]", "Отправить PUT запрос (тоже самое что и POST)" },
            { "[POST_MULTIPART][][][]", "Отправка post запроса с файлом,первый параметр запрос, который должен содержать !FILE! после имя= для указания имени переменной которой для которой предназначен файл, второй параметр путь к файлу\nПример: [POST_MULTIPART][http://djoser-blog.ru/login.php][name=vasya&old=34&fname=!FILE!][fileoto.jpg]" },
            { "[PASS_CLOUDFLARE][]", "Пройти защиту от ботов на claudflare\nПример:[PASS_CLOUDFLARE][https://satoshivars.com]" },
            { "[AJAX_GET][]", "Функция для отправки GET запроса на сервер, с применение дополнительных заголовков нужных для HttpRequest запроса\nПример: [AJAX_GET][http://djoser-blog.ru/]\nВажно!: функция после запроса удаляет дополнительные загголовки, тоесть если вы перед ней вызывали функцию [ADD_HEADER] то ваши заголовки тоже удалятся" },
            { "[AJAX_POST][][]", "Функция для отправки POST запроса на сервер, с применение дополнительных заголовков нужных для HttpRequest запроса\nПример: [AJAX_POST][http://djoser-blog.ru/][login=admin&pass=12345]\nВажно!: функция после запроса удаляет дополнительные загголовки, тоесть если вы перед ней вызывали функцию [ADD_HEADER] то ваши заголовки тоже удалятся" },
            //{"[AJAX_PUT][][]", "" },

            { "[SET_USER_AGENT][]", "Установить юзер агент\nПример: [SET_USER_AGENT][Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)]" },
            { "[SET_REFERER][]", "Установить реффер\nПример:[SET_REFERER][https://www.google.com.ua/]" },
            { "[SET_HOST][][]", "Установить ip адресс для домена, нужна для того чтобы программа не обращалась за ip к ДНС\nПример: [SET_HOST][djoser-blog.ru][5.55.24.57]" },
            { "[COOKIE_TO_BUFFER][]", "Функция сохраняет все куки для указанного домена в буффер" },
            { "[SET_TIMEOUT][]", "Установить timeout для ожидания соединения+чтения для сайта/прокси, по умолчанию тайм аут 10 секунд\nПример: [SET_TIMEOUT][30] " },
            { "[REQUEST_TO_UTF]", "Конвертировать кодировку ответа от сервера в UTF-8" },
            { "[SET_COOKIE][][]", "Функция для установки своих cookies в програму, первый параметр - домен, второй имя куки=значение\nПример: [SET_COOKIE][djoser-blog.ru][phpsessid=76rybdrhr6hrd6vr6vhdrvj]" },
            { "[CLEAR_ALL_COOKIES]", "Удалить все куки" },
            { "[COPY_COOKIE][][]", "Скопировать куки с одного домена на другой\n[COPY_COOKIE][maul.ru][m.mail.ru]" },
            { "[SAVE_COOKIE]", "Сохраняет все куки приобретенные за время работы шаблона, можно указать имя файла для сохранения куков\nПример: [SAVE_COOKIE]\nПример: [SAVE_COOKIE][lolName]" },
            { "[LOAD_COOKIE]", "Загружает куки сохраненные шаблоном, можно указать имя файла для загрузки куков\nПример: [LOAD_COOKIE]\nПример: [LOAD_COOKIE][lolName]" },
            { "[ADD_HEADER][][]", "Добавить дополнительный заголовок\nПример: [ADD_HEADER][X-Token][fgh76tfdty6r6bb76767bs4evs]" },
            { "[ADD_TEMPORARY_HEADER][][]", "Добавить временный дополнительный заголовок, самоудалиться после отправки запроса\nПример:[ADD_TEMPORARY_HEADER][Accept][application/json, text/plain, */*]" },
            { "[DELL_ADDED_HEADER][]", "Удалить дополнительный заголовок\nПример: [DELL_ADDED_HEADER][X-Token]" },
            { "[CLEAR_ADDED_HEADERS]", "Удалить все дополнительные заголовки" },
            { "[SET_KEEP_ALIVE][][]", "Установить настройки keep-alive, первый параметр bool выключить/включть 0/1 - по умолчанию включено, второй параметр - время в секундах, по умолчанию 180\nПример: [SET_KEEP_ALIVE][1][250]\n[SET_KEEP_ALIVE][0][0]" },

            { "[USE_PROXY][][]", "Использовать для подключения указанный прокси, первый параметр - тип прокси, HTTP,HTTPS,SOCKS5, второй параметр адресс:порт\nПример: [USE_PROXY][HTTPS][13.67.55.123:3132]\nПример: [USE_PROXY][HTTPS][13.67.55.123:3132][Login: pass] " },
            { "[DELL_PROXY]", "Отменить использование указанного прокси" },
            { "[SET_PHP_GATE][]", "Установить php gate\nПример: [SET_PHP_GATE][http://site.ru/gate.php]" },
            { "[UNSET_PHP_GATE]", "Отключить установленный php gate" },
            { "[TOR_NEW_IDENTITY][]", "Получить новый ip адресс для тора, в параметре принимает порт\nПример:[TOR_NEW_IDENTITY][9050]" },
            { "[ON_OFF_PROXY]","Включить / Выключить использоваие прокси ON_OFF_PROXY\nПример:\nВключить [ON_OFF_PROXY][1]\n Выключить [ON_OFF_PROXY][0]" }
        };
    }
}